<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 原生Generator函数
    function* iterator() {
      yield '1号选手';
      yield '2号选手';
      yield '3号选手';
    }
    let iter = iterator()
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());

    // 手撕
    function iteratorGenerator(list) {
      // idx记录当前访问的索引
      var idx = 0
      // len记录传入集合的长度
      var len = list.length

      return {
        // 自定义next方法
        next() {
          // 如果索引还没有超出集合长度，done为false
          var done = idx >= len
          // 如果done为false，则可以继续取值
          var value = !done ? list[idx++] : undefined
          // 将当前值域遍历是否完毕返回
          return {
            done,
            value
          }

        }
      }
    }
    var iterator = iteratorGenerator(['1号选手', '2号选手', '3号选手'])
    

  </script>
</body>

</html>